package StackArray

//数组栈
type StackArray interface {
	Clear()            //清空
	Size() int         //大小
	Pop() interface{}  //弹出
	Push(data interface{})  //压入
	IsFull() bool      //是否满了
	IsEmpty() bool     //是否为空
}

type Stack struct {
	dataSource  []interface{} //数组
	capsize     int           //最大范围
	currentsize int           //实际使用大小
}

func NewStack() StackArray {
	stack := new(Stack)
	stack.dataSource = make([]interface{}, 0, 1000)
	stack.capsize = 1000
	stack.currentsize = 0
	return stack
}

func (s *Stack) Clear() {
	s.dataSource = make([]interface{}, 0, 1000)
	s.currentsize = 0
	s.capsize = 1000
}

func (s *Stack) Size() int {
	return s.currentsize
}

func (s *Stack) Pop() interface{} {
	if!s.IsEmpty(){
		last:= s.dataSource[s.currentsize-1]//最后一个数据
		s.dataSource = s.dataSource[:s.currentsize-1]//删除最后一个
		s.currentsize --
		return last
	}
	return nil
}

func (s *Stack) Push(data interface{})  {
	if !s.IsFull(){
		s.dataSource = append(s.dataSource, data) //压入
		s.currentsize++
	}
}

func (s *Stack) IsFull() bool {
	if s.currentsize >= s.capsize {
		return true
	}
	return false
}

func (s *Stack) IsEmpty() bool {
	if s.currentsize == 0 {
		return true
	}
	return false
}
